/**
 * 从视频中截取一个时间片段
 *
 * ```shell
 * $ deno run --allow-run --allow-read --allow-write src/slice.js --ss=00:00:01 --to=00:00:05 -i temp/input.mp4 -o temp/output-slice.mp4
 * ```
 *
 * 命令行参数说明：
 * 1. --ss : 起始时间点，值格式为 "HH:mm:ss"
 * 2. --to : 结束时间点，值格式为 "HH:mm:ss"
 * 3. -t : 时长，单位为秒
 * 4. -i : 输入视频，默认为 temp/input.mp4
 * 5. -o : 输出视频，默认为 temp/output-slice.mp4，无 -o 键的参数也统一作为 -o 的值
 */

import { parse } from "/deno.land/std/flags/mod.ts";
import { ffmpeg } from "./share/ffmpeg.js";
import { log } from "./share/common.js";

// 解析命令行参数
const parsedArgs = parse(Deno.args);

// 构建 ffmpeg 参数
const ffmpegArgs = { "-strict": "strict" };

// 1. 起始时间点
if (Object.hasOwn(parsedArgs, "ss")) ffmpegArgs["-ss"] = parsedArgs["ss"];

// 2. 结束时间点
if (Object.hasOwn(parsedArgs, "to")) ffmpegArgs["-to"] = parsedArgs["to"];

// 3. 时长
if (Object.hasOwn(parsedArgs, "t")) ffmpegArgs["-t"] = parsedArgs["t"];

// 4. 输入文件名，默认 "temp/input.mp4"
ffmpegArgs["-i"] = Object.hasOwn(parsedArgs, "i") ? parsedArgs["i"] : "temp/input.mp4";

// 5. 如果有 -y -n --vf 等自定义的参数也添加进去，方便自定义额外的 ffmpeg 参数
if (Object.hasOwn(parsedArgs, "y")) ffmpegArgs["-y"] = true;
if (Object.hasOwn(parsedArgs, "n")) ffmpegArgs["-n"] = true;
if (Object.hasOwn(parsedArgs, "vf")) {
  ffmpegArgs["-vf"] = Object.hasOwn(ffmpegArgs, "-vf") ? `${ffmpegArgs["-vf"]},${parsedArgs["vf"]}` : parsedArgs["vf"];
}

// 6. 输出文件名列表，默认 "temp/output-slice.mp4"
ffmpegArgs["_"] = parsedArgs["_"];
if (Object.hasOwn(parsedArgs, "o")) ffmpegArgs["_"].push(parsedArgs["o"]);
if (ffmpegArgs["_"].length === 0) ffmpegArgs["_"].push(`temp/output-crop.mp4`);

log(`开始截取视频片段`);

// 执行 ffmpeg 处理
await ffmpeg(ffmpegArgs, true);

log(`结束`);
